##########################
# 如果版本低于 3.0,则退出 tmux
##########################
run-shell 'tmux setenv -g TMUX_VERSION $(tmux -V | sed -En "s/^tmux [a-zA-Z\-]*([0-9]+(\.[0-9]+)*)([a-z]*)/\1/p")'
if-shell -b '[ "$(echo "$TMUX_VERSION < 3.0 " | bc)" -eq 1 ]' {
  run-shell "echo tmux 3.0+ is required"
  run-shell "sleep 1"
  run-shell "pkill tmux"
}

##########################
# 前缀键和基本设置
##########################
# 将前缀键改为 M-o (Alt+o)
unbind ^b
set -g prefix M-o
# 绑定 Enter 键重新加载配置文件
bind Enter source-file ~/.tmux.conf \; display "leatchina's tmux config reloaded!"

# 开启视觉活动提示和状态栏背景色
set -g visual-activity on
set -g status-bg black
set -g status-fg white

# 开启自动重新编号窗口
set-option -g renumber-windows on

############################################################
# 主题
############################################################
# 设置默认终端为 256 色
set -g default-terminal "xterm-256color"
set-option -ga terminal-overrides ',*256col*:Tc'

#############################################################
# 时间相关设置
#############################################################

# 设置 Esc 键响应时间、显示时间等
set -g escape-time 50
set -g display-time 2500
set -g display-panes-time 2000
set -g history-limit 65535

#############################################################
# 状态栏设置
#############################################################
# 设置状态栏左右两侧的内容和格式
set -g status-left-length 30
set -g status-left "#[fg=yellow]#S"
set -g status-right-length 60
set -g status-right "#[fg=red] W#I:P#P #[fg=blue]| %Y-%b-%d #[fg=white]| %k:%M "
set -g status-interval 1
set -g status-justify centre
set-window-option -g clock-mode-colour colour223
set-window-option -g automatic-rename off
set-window-option -g window-status-current-format "#I:#W#F"

#############################################################
# 面板设置
#############################################################
# 设置面板索引从 1 开始,开启鼠标支持
unbind Space
set -g base-index 1
set -g pane-base-index 1
set -g mouse on;

# 设置当前面板的样式
set-window-option -g window-status-current-style fg=cyan

# 分割窗口
bind -n M-] split-window -h -c '#{pane_current_path}'
bind -n M-[ split-window -c '#{pane_current_path}'

# 选择面板
is_vim="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
bind -n M-H if-shell "$is_vim" "send-keys M-H"  "select-pane -L"
bind -n M-J if-shell "$is_vim" "send-keys M-J"  "select-pane -D"
bind -n M-K if-shell "$is_vim" "send-keys M-K"  "select-pane -U"
bind -n M-L if-shell "$is_vim" "send-keys M-L"  "select-pane -R"
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
bind Left select-pane -L
bind Down select-pane -D
bind Up select-pane -U
bind Right select-pane -R

# 调整面板大小
bind M-h resizep -L 8
bind M-j resizep -D 5
bind M-k resizep -U 5
bind M-l resizep -R 8

# 关闭面板
unbind x
bind -n M-\\ killp

# 交换面板位置
bind [ swapp -U
bind ] swapp -D

# 切换到最后一个面板
unbind e
bind M-. lastp

############################################################
# 窗口操作
############################################################

# 解绑默认新建窗口快捷键
unbind ^e
unbind c
unbind t

# 新建窗口
bind -n M-O new-window

# 切换窗口
bind -n M-P previous-window
bind -n M-N next-window

# 交换窗口位置并切换
bind -n S-Left  swap-window -t -1 \; previous-window
bind -n S-Right swap-window -t +1 \; next-window

# 移动窗口到指定位置
bind M-p swap-window -d -t -1
bind M-n swap-window -d -t +1

# 切换到最后一个窗口
bind M-w last

# 关闭窗口
bind M-q killw

# 移动窗口到指定编号
bind Space command-prompt 'move-window -t %%'

#############################################################
# 复制粘贴
#############################################################
# 使用 vi 风格的键位
set-window-option -g mode-keys vi
# 监视焦点事件,使得能在 vim 和 tmux 之间自由复制
set -g focus-events on
# 列出剪贴板内容
bind b list-buffers
# 粘贴
bind p paste-buffer
# 选择要粘贴的内容
bind -n M-\" choose-buffer
# 进入复制模式
bind -n M-\| copy-mode\; display "Enter copy mode."\; send-keys -X begin-selection
# 在复制模式中移动光标
bind -T copy-mode-vi v send -X begin-selection
bind -T copy-mode-vi V send -X select-line
bind -T copy-mode-vi y send -X copy-selection
bind -T copy-mode-vi q send -X cancel
bind -T copy-mode-vi a send -X append-selection-and-cancel
bind -T copy-mode-vi r send -X rectangle-toggle

# 复制到系统剪贴板
unbind -T copy-mode-vi Enter
bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel 'xclip -se c -i'

############################################################
# 重命名
############################################################
unbind ,
unbind .
# 重命名会话
bind M-s command-prompt 'rename-session %%'
# 重命名窗口
bind M-r command-prompt 'rename-window  %%'

#############################################################
# 选择树形菜单/面板
#############################################################
unbind w
bind Tab choose-tree
# Check if tmux-fzf plugin is loaded, use it to select pane, otherwise use native choose-tree
bind M-o if-shell "[ -d ~/.tmux/plugins/tmux-fzf ]" \
    "run-shell '~/.tmux/plugins/tmux-fzf/scripts/pane.sh switch'" \
    "choose-tree"
############################################################
# plugins
############################################################
# Set FZF options
TMUX_FZF_ORDER="pane|window|session|command|keybinding|clipboard|process"
TMUX_FZF_LAUNCH_KEY="M-f"
TMUX_FZF_OPTIONS="-p -w 66% -h 66% -m --reverse"
# TMUX_FZF_PANE_FORMAT="[#{window_name}] #{pane_current_path} #{?pane_active,[active],[inactive]}"
# TMUX_FZF_PANE_FORMAT="[] #{pane_current_command} #{pane_current_path} #{?pane_active,[active],[inactive]}"
TMUX_FZF_PANE_FORMAT="[#{window_name}] #{pane_current_command} #{pane_current_path} #{?pane_active,[active],[inactive]}"
set -g @plugin 'sainnhe/tmux-fzf'
set -g @plugin 'tmux-plugins/tpm'
# tpm - only load if file exists
if-shell "[ -f ~/.tmux/plugins/tpm/tpm ]" \
    " run '~/.tmux/plugins/tpm/tpm' "
